package com.wang.myblog.mapper;

import com.wang.myblog.entity.Archive;
import com.wang.myblog.entity.Article;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Mapper
@Repository
public interface ArticleMapper {

    int insert(Article article);

    int deleteById(Integer id);

    Article queryById(Integer id);

    List<Article> queryByStatus(Integer status);

    int update(Article article);

    //获得某个状态下文章的总数,如果有搜索条件的话加上搜索条件限制
    Integer getCountByStatus(@Param("status") Integer status, @Param("searchMsg") String searchMsg);

    //查询某个状态的文章，分页，start是数据库开始行的索引（从0开始）,根据修改时间降序
    List<Article> queryByPageAndStatus(@Param("start") Integer start, @Param("limit") Integer limit, @Param("status") Integer status, @Param("searchMsg") String searchMsg);

    //获取某个分类的文章总数
    Integer getCountByKindId(Integer kindId);

    //获取某个分类的文章总数（已发布）
    Integer getCountByKindIdAndStatus(@Param("kindId") Integer kindId,@Param("status") Integer status);

    List<Article> queryArticleByKindId(Integer KindId);

    List<Article> queryArticleByTagId(Integer tagId);

    //前台获取已发布的文章，根据发布时间降序
    List<Article> queryPublishedArticleOrderByPublishTime(@Param("start")Integer start,@Param("limit")Integer limit);

    //获取阅读量最高的10篇文章(已发布)
    List<Article> queryOrderByReadCount();

    //获取归档
    List<Archive> getArchive();

    //根据标签ID获取已发布的文章
    List<Article> queryPublishedArticleByTagId(@Param("tagId")Integer tagId,@Param("start")Integer start,@Param("limit")Integer limit );

    //根据分类ID获取已发布的文章
    List<Article> queryPublishedArticleByKindId(@Param("kindId")Integer kindId,@Param("start")Integer start,@Param("limit")Integer limit );

    //前台获取归档文章
    List<Article> queryByDate(@Param("date") Date date,@Param("start")Integer start,@Param("limit")Integer limit);

    //前台通过搜索信息获取文章，以阅读量降序
    List<Article> queryPublishedArticleByMsg(@Param("msg") String msg,@Param("start")Integer start,@Param("limit")Integer limit);

    //前台通过搜索信息获取文章的总数
    Integer getPublishedCountByMsg(String msg);


}
